﻿using System;
using System.Globalization;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using StockholmsStad.Web.UI.Class.Controller;
using StockholmsStad.Web.UI.Class.Interfaces;
using StockholmsStad.Web.UI.UIServiceReference;

namespace StockholmsStad.Web.UI.Controls.Bokning
{
    /// <summary>
    /// Tredjesidan för bokningen. Användaren för en översikt över bokningen och kan 
    /// bekräfta den.
    /// </summary>
    public partial class Bokning3_Confirm : UserControl, IBokning3_Confirm
    {
        private static readonly DateTimeFormatInfo FORMAT_INFO = new CultureInfo("sv-SE", false).DateTimeFormat;

        /// <summary>
        /// MVC Controller
        /// </summary>
        public BookingController Controller { get; set; }

        /// <summary>
        /// Körs när sidan laddas
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            StringBuilder conditionsText = new StringBuilder();
            conditionsText.AppendFormat("* Ansökan om hindersprövning görs hos Skatteverket, kontaktuppgifter finns under fliken Frågor och svar.{0}{1}", Environment.NewLine, Environment.NewLine);
            conditionsText.AppendFormat("* Hindersprövning och vigselintyg skickas i original till stadshuset, adressen finns under fliken Frågor och svar.{0}{1}", Environment.NewLine, Environment.NewLine);
            conditionsText.AppendFormat("* Handlingarnas giltighetstid är fyra månader.{0}{1}", Environment.NewLine, Environment.NewLine);
            conditionsText.AppendFormat("* För vigsel i stadshuset: senast nio veckor före ceremonin skall era handlingar vara oss tillhanda för att tiden inte skall avbokas.{0}{1}", Environment.NewLine, Environment.NewLine);
            conditionsText.AppendFormat("* För vigsel på annan plats: senast fyra veckor före ceremonin skall era handlingar vara oss tillhanda för att tiden inte skall avbokas.{0}{1}", Environment.NewLine, Environment.NewLine);
            conditionsText.Append("* Mer information finns under flikarna Frågor och svar och Vad händer sedan?");
            txtConditions.Text = conditionsText.ToString();
            InitializeStepControl();
        }


        private void InitializeStepControl()
        {
            BookingSteps.Clear();
            BookingSteps.AddStep("Välj tid", false, true);
            BookingSteps.AddStep("Bekräfta bokning", true, false);
            BookingSteps.Refresh();
        }
        /// <summary>
        /// Validera att användaren har klickat i godkänna villkor
        /// </summary>
        /// <param name="source"></param>
        /// <param name="args"></param>
        protected void cbxConditionsCustomValidator_ServerValidate(object source, ServerValidateEventArgs args)
        {
            args.IsValid = cbxConditions.Checked;
        }

        private static string GetTimeText(DateTime dateTime)
        {
            return dateTime.ToString("HH:mm");
        }

        private static string GetDateWeekdayText(DateTime dateTime)
        {
            return dateTime.ToString("dddd d MMMM yyyy", FORMAT_INFO);
        }

        #region Implementation of IBokning3_Confirm

        /// <summary>
        /// Uppdatera bokningsinformationen på sammanfattningen.
        /// </summary>
        /// <param name="booking"></param>
        /// <param name="locationName"></param>
        public void UpdateBooking(Booking booking, string locationName)
        {
            bookingSummary.UpdateBooking(booking, GetDateWeekdayText, GetTimeText,
                                         locationName);
        }

        #endregion
    }
}